# 演员
"""
video_info = {
    "name": str, # 名字，作为唯一标识
    "otherName": ["",""], # 别名
    "url": str,      # 文件夹路径
    "race": str,     # 种族：黑人，白人，黄人，棕人
    "height": str,   # 身高：超高(170以上)，高挑(160-170)，娇小（150-160），幼小（150以下）
    "chest": str,    # 胸部：巨乳(G以上)，豪乳（E、F)，美乳(C、D)，小胸(A、B)，平胸（AA）
    "physique": str, # 体格：丰满、清瘦、健美、匀称
    "style": ["",""],  # 风格：麻辣(诱惑)、香辣(性感)、甜美(可爱)、激烈(疯狂、重口味)
    "advantage": ["",""]   # 亮点：高颜值、蜜桃臀、大长腿、演技一流
}
"""
import logging
from tinydb import where
from com.lanson.db.DatabaseManager import DatabaseManager

class VideoDAO:
    def __init__(self):
        logging.getLogger().setLevel(logging.INFO)
        self.database = DatabaseManager().load_database().get_database()  # 在初始化时加载数据库
        self.table = self.database.table("_artress")  # 显式指定表操作

    def insert(self, table_info):
        """ 插入视频信息，使用hash作为主键；如果name已经存在，则不会插入重复数据 """
        if not self.table.contains(where('name') == table_info['name']):
            self.table.insert(table_info)
        else:
            logging.info(f'Artress with name {table_info["name"]} already exists, skipping insertion.')

    def batch_insert(self, table_info_list):
        """
        批量插入信息列表。该方法尝试减少数据库I/O操作次数以提升性能。
        """
        for table_info in table_info_list:
            # 保持原有逻辑，检查hash是否已存在以避免重复插入
            if not self.table.contains(where('name') == table_info['name']):
                self.table.insert(table_info)
            else:
                logging.info(f'Artress with name {table_info["name"]} already exists, skipping insertion in bulk operation.')

    def get_by_name(self, hash_value):
        """根据name获取信息"""
        return self.table.get(where('name') == hash_value)

    def close(self):
        self.database.close()